package com.example.my_push.jni;

public class PushNative {
    static {
        System.loadLibrary("ling_push");
    }

    /**
     * 初始动态库
     */
    public native void native_init();
    /**
     * 设置X64编码视频参数
     * @param width
     * @param height
     * @param bitrate
     * @param fps
     */
    public native void setVideoEncInfo(int width,int height, int fps,int bitrate);
    /**
     * 设置aac编码音频参数
     * @param sampleRateInHz
     * @param channel
     */
    public native void setAudioEncInfo(int sampleRateInHz, int channel);
    /**
     * 初始动RTMP,尝试连接服务器
     *  1.连接服务器成功，jni将会获得可以发数据的RTMP通道
     *  2.连接服务器失败，RTMP将会被释放
     */
    public native void startPush(String url);
    /**
     * 视频数据数据传入jni（内部会自动编码，并发送到服务器）
     * 注意：使用前，请确保RTMP连接成功
     * @param data
     */
    public native void fireVideo(byte[] data);

    /**
     * 音频数据传入jni内部会自动编码，并发送到服务器）
     * 注意：使用前，请确保RTMP连接成功
     * @param data
     * @param len
     */
    public native void fireAudio(byte[] data, int len);

    public native void  stopPush();
    public native void release() ;

    public native int getInputSamples();
    /**
     *  java层接口
     */
    private ConnectListener mConnectListener;

    public void setOnConnectListener(ConnectListener connectListener) {
        this.mConnectListener = connectListener;
    }

    public interface ConnectListener{
        void connectError(int errorCode, String errorMsg);
        void connectSuccess();
    }
    /**
     *  jni层回调java接口
     */
    // called from jni
    private void onConnectError(int errorCode, String errorMsg){
        if(mConnectListener != null){
            mConnectListener.connectError(errorCode,errorMsg);
        }
    }
    // called from jni
    private void onConnectSuccess(){
        if(mConnectListener != null){
            mConnectListener.connectSuccess();
        }
    }
}
